% 自动化批量电流测试程序
close all; clear; clc;

% 用户输入参数
amp = input('请输入三角波幅值（单位：度，默认30）：');
if isempty(amp), amp = 30; end
speed = input('请输入三角波速度（单位：度/秒，默认1）：');
if isempty(speed), speed = 1; end
n_cycles = input('请输入三角波周期数（默认20）：');
if isempty(n_cycles), n_cycles = 20; end
adc_chan = input('请输入ADC采集通道（0-7，默认0）：');
if isempty(adc_chan), adc_chan = 0; end
current_start = input('请输入电流起始值（A，默认0）：');
if isempty(current_start), current_start = 0; end
current_end = input('请输入电流结束值（A，默认1）：');
if isempty(current_end), current_end = 1; end
current_step = input('请输入电流步长（A，默认0.1）：');
if isempty(current_step), current_step = 0.1; end

current_list = current_start:current_step:current_end;

try
    recover_batch();
    fprintf('恢复运动完成。\n');
catch ME2
    fprintf('恢复运动发生错误：%s\n', ME2.message);
end

for i = 1:length(current_list)
    supply_current = current_list(i);
    fprintf('\n===== 开始测试电流: %.3f A =====\n', supply_current);
    try
        triangle_wave_motion_batch(amp, speed, n_cycles, adc_chan, supply_current);
        fprintf('电流%.3fA测试完成，已保存数据。\n', supply_current);
    catch ME
        fprintf('电流%.3fA测试发生错误：%s\n', supply_current, ME.message);
    end
    fprintf('恢复运动中...\n');
    try
        recover_batch();
        fprintf('恢复运动完成。\n');
    catch ME2
        fprintf('恢复运动发生错误：%s\n', ME2.message);
    end
end

fprintf('\n===== 所有电流测试完成 =====\n');

% ========== 批量调用triangle_wave_motion的函数 ==========
function triangle_wave_motion_batch(amp, speed, n_cycles, adc_chan, supply_current)
    evalin('base', 'clear amp speed n_cycles adc_chan supply_current');
    assignin('base', 'amp', amp);
    assignin('base', 'speed', speed);
    assignin('base', 'n_cycles', n_cycles);
    assignin('base', 'adc_chan', adc_chan);
    assignin('base', 'supply_current', supply_current);
    triangle_wave_motion;
end

% ========== 批量调用recover的函数 ==========
function recover_batch()
    recover;
end
